﻿
namespace CompositePattern;

/// <summary>
/// 递归
/// </summary>
public class Recursion
{
    /// <summary>
    /// 给一个根目录，递归获取所有子目录
    /// </summary>
    /// <param name="directory"></param>
    /// <returns></returns>
    public static List<DirectoryInfo> GetAllDirectories(string directoryPath)
    {
        DirectoryInfo directory = new DirectoryInfo(directoryPath);
        List<DirectoryInfo> directories = new List<DirectoryInfo>();
        directories.Add(directory);
        foreach (var subDirectory in directory.GetDirectories())
        {
            directories.AddRange(GetAllDirectories(subDirectory.FullName));
        }
        return directories;
    }

    // 递归获取目录列表
    public static void GetDirectoryList(List<DirectoryInfo> dirList, DirectoryInfo directory)
    {
        // 将当前目录添加到目录列表中
        dirList.Add(directory);
        // 遍历当前目录下的所有子目录
        foreach (var subDirectory in directory.GetDirectories())
        {
            // 递归调用GetDirectoryList方法，获取子目录下的所有子目录
            GetDirectoryList(dirList, subDirectory);
        }
    }



    // 获取指定路径下的所有目录列表
    public static List<DirectoryInfo> GetDirectoryList(string directoryPath)
    {
        // 创建指定路径的目录信息对象
        DirectoryInfo directory = new DirectoryInfo(directoryPath);
        // 创建一个目录信息对象的列表
        List<DirectoryInfo> dirList = new List<DirectoryInfo>();
        // 调用递归方法获取目录列表
        GetDirectoryList(dirList, directory);
        // 返回目录列表
        return dirList;
    }

    // 递归获取目录列表
    public static void GetDirectoryListChild(List<DirectoryInfo> dirList, DirectoryInfo dirParent)
    {
        // 获取当前目录下的所有子目录
        var dirListChild = dirParent.GetDirectories();
        // 将子目录添加到目录列表中
        dirList.AddRange(dirListChild);
        // 遍历子目录
        foreach (var dir in dirListChild)
        {
            // 递归调用，获取子目录下的子目录
            GetDirectoryListChild(dirList, dir);
        }
    }
}
